﻿//////////////////////////////////////////////////////////////////////////////
//
//  Copyright © 1998-2024 Glodon Company Limited.  All rights reserved.
//
//  Use of this software is subject to the terms of the Glodon license
//  agreement provided at the time of installation or download, or which
//  otherwise accompanies this software in either electronic or hard copy form.  
//
//////////////////////////////////////////////////////////////////////////////

#pragma once
#include "GmFamilyService.h"

namespace gfam
{
class IFamilyCustomDataParameterParser;

// \brief 族自定义参数解析器的管理器
class GM_FAMILY_SERVICE_EXPORT IFamilyCustomDataParameterParserManager
{
public:
    // \brief 获取族自定义参数解析器的管理器对象
    static IFamilyCustomDataParameterParserManager* Get();

    virtual ~IFamilyCustomDataParameterParserManager() {}

public:
    /// \brief 注册解析器。
    ///
    /// \param customDataId 自定义参数ID
    /// \param opParser 解析器对象
    /// \return true表示注册成功，false表示注册失败。
    virtual bool Register(const std::wstring& customDataId, gcmp::OwnerPtr<IFamilyCustomDataParameterParser> opParser) = 0;

    /// \brief 取消注册解析器。
    ///
    /// \param customDataId 自定义数据ID
    /// \return true表示取消注册成功，false表示取消注册失败。
    virtual bool UnRegister(const std::wstring& customDataId) = 0;

    /// \brief 获取解析器。
    ///
    /// \param customDataId 自定义数据ID
    /// \return 解析器对象
    virtual const IFamilyCustomDataParameterParser* GetCustomDataParameterParser(const std::wstring& customDataId) const = 0;
};

} // end namespace gfam
